A data center is a facility that may be used to house computer systems and associated components, such as telecommunications and storage systems. A data center may include redundant or backup power supplies, redundant data communications connections, environmental controls (e.g., air conditioning and fire suppression) and various security devices.
The organization of large scale data centers has evolved rapidly as the commercial opportunities they provide has expanded. Typical modern data centers may be organized collections of clusters of hardware that run collections of standard software packages, such as web servers database servers, etc., which may be interconnected by high speed networking, routers, and firewalls. Human operators typically organize these machines, optimize their configuration, debug errors in their configuration, and install and uninstall software on the constituent machines.
There are web services (e.g., software as a service, or “SaaS”) that are supported by data centers. Many services are designed as “distributed” applications characterized by components that run on different machines, typically in communication via a network, such as the Internet. For example, a shift towards interactive Web 2.0 applications has led to development of truly distributed systems where code is written in different languages, runs on multiple machines, and interacts in complex ways. Today, many such applications are written in an ad-hoc manner, where the server and client-side functionality are developed at the same time—but separately and often in different programming languages—and subsequently combined. Distribution of multi-tier components can be complex and require significant resources to ensure proper operation, not to mention collection of information as to how an application performs, the number of users and other metrics that can impact overall cost (e.g., number of servers, bandwidth, number of I/Os, advertising revenue, etc.).